Примеры
mntgen Mntgen - это простая программа, которая создает (в действительности, делает вид что создает) каталог во время перехода в него. Обычно она применяется для каталога /n, куда монтируются все виды сетевых сервисов. Из-за того что серивсов и сетей может быть огромное множество, не очень удобно создавать каталоги для всех этих сервисов. С помощью mntgen, вы можете получить пустой каталог /n и иметь возможность монтировать сервисы как подкаталоги. Следующий пример иллюстрирует применение mntgen. Во-первых, исследуем /n без mntgen: % cd /n % ls -l % % ls -ld test ls: stat test: 'test' file does not exist % % cd test cd: test: 'test' file does not exist % % bind '#m' /n/mouse bind: /n/mouse: '/n/mouse' does not exist % Как вы видите, /n пуст. Теперь то же самое, но без mntgen: % mount {mntgen} /n % % cd /n/ % % ls -ld test d-r-xr-xr-x M 2 me me 0 Jan 01 1970 test % % ls -ld another d-r-xr-xr-x M 2 me me 0 Jan 01 1970 another % % cd more % pwd /n/more % % bind '#m' /n/mouse % ls -l /n/mouse ---w--w--w- m 0 mjl mjl 0 Apr 15 20:37 /n/mouse/cursor --rw-rw-rw- m 0 mjl mjl 0 Apr 15 20:37 /n/mouse/pointer % ftpfs Ftpfs - это ftp-клиент, реализованный в виде файлового сервера. Он просто представляет файлы ftp-сервера в виде файловой системы. Пример должен говорить сам за себя: % ftpfs -a none@example.org -m /n/ftp ftp.openbsd.org 220 openbsd.srv.ualberta.ca FTP server ready. 331 Guest login ok, send your email address as password. % % cd /n/ftp % cd pub/OpenBSD % ls -l d-rwxr-xr-x M 6 0 0 1024 Sep 28 2008 4.2 d-rwxr-xr-x M 6 0 0 1024 Sep 28 2008 4.3 d-rwxr-xr-x M 6 0 0 1024 Sep 04 2008 4.4 d-rwx------ M 6 0 0 512 Mar 09 17:04 4.5 d-rwxr-xr-x M 6 318 0 512 Feb 19 23:24 OpenBGPD d-rwxr-xr-x M 6 318 0 512 Jan 16 06:05 OpenNTPD d-rwxrwxr-x M 6 0 122 4608 Feb 22 17:34 OpenSSH --rw-r--r-- M 6 0 121 238 Feb 07 1997 README d-rwxr-xr-x M 6 20001 20001 454144 Apr 17 01:03 distfiles d-rwxr-xr-x M 6 308 0 2048 Jan 12 04:20 doc --rw-r--r-- M 6 0 0 8741 Sep 03 2008 ftplist d-rwxr-xr-x M 6 0 100 1024 Apr 07 03:59 patches d-rwxr-xr-x M 6 0 122 512 Aug 31 2008 snapshots d-rwxr-xr-x M 6 0 100 1024 Apr 07 21:07 songs d-rwxr-xr-x M 6 0 121 512 Jun 28 2008 tmp d-rwxr-xr-x M 6 0 100 512 Jan 07 2005 tools % tarfs Tarfs монтирует tar-файл (в режиме только-чтение). Tar является простым файловым форматом, однако традиционная дисковая "файловая система" в действительности программа такого же типа, только с другим форматом файла (плюс к этому она реализуют запись). % tarfs gps.tar /n/tar % cd /n/tar % ls -l d-rwxrwxr-x M 16 0 0 0 Jul 07 2006 gps % cd gps % ls -l --rw-rw-r-- M 16 0 0 287 Mar 04 2006 dat.h --rw-rw-r-- M 16 0 0 4501 Mar 04 2006 gpsevermore.c --rw-rw-r-- M 16 0 0 18924 Apr 09 2006 gpsfs.c --rw-rw-r-- M 16 0 0 219 Mar 04 2006 mkfile --rw-rw-r-- M 16 0 0 2795 Mar 04 2006 util.c % wc gpsfs.c 1010 2713 18920 gpsfs.c % cd % unmount /n/tar memfs Memfs - это файловая система, которая хранит файлы в оперативной памяти. Идельна для монтирования к /tmp: % ls -l /tmp/test ls: stat /tmp/test: '/tmp/test' does not exist % % mount -bc {memfs -s} /tmp % % echo test >/tmp/test % ls -l /tmp/test --rw-r--r-- M 20 mjl memfs 5 Apr 17 22:43 /tmp/test % % unmount /tmp % ls -l /tmp/test ls: stat /tmp/test: '/tmp/test' does not exist % /net, or #I Сетевой стек предоставляется драйвером устройства "#I". У него имеется по каталогу на каждый протокол, например, tcp. Когда "#I" монтируется по умолчанию в /net, tcp-стек становится доступен в /net/tcp. Библиотечные функции, которые имеют дело сетевыми соединениями (такие как dial и announce, для соединения и обслуживания) могут быть реализованы при помощи обычных вызовов open/read/write к файлам в каталоге /net/tcp. Чтобы продемонстрировать легкость, с которой может быть использован /net/tcp, давайте рассмотрим следующий шелл-скрипт, который осуществляет HTTP-запрос: <>3/net/tcp/clone { dir=/net/tcp/^`{cat <0=3} echo connect 74.125.77.99!80 >$dir/ctl && { echo 'GET /search?q=inferno-os&btnI=I''m+Feeling+Lucky HTTP/1.1' && echo 'connection: close' && echo 'host: www.google.com' && echo '' }>$dir/data cat $dir/data } И результат его работы: HTTP/1.1 302 Found Location: http://www.vitanuova.com/inferno/ Cache-Control: private Content-Type: text/html; charset=UTF-8 Date: Sat, 18 Apr 2009 19:57:52 GMT Server: gws Content-Length: 230 Connection: close 302 Moved 302 Moved The document has moved here. Это демонстрация мощи хорошо спроектированной абстракции, и такого превосходного инструмента как командный интерпретатор Inferno. В подобной манере, можно сделать dns-запрос при помощи /net/dns, и более общее преобразование сетевых адресов посредством /net/cs.